﻿//编辑对话框
var dlg = new MyAppDialog(700, 480);

//关闭对话框
function closeDialog() {
    dlg.close();
}

$(document).ready(function () {
    var tab = $('#tab').tabs();

    //初始化表单验证
    initValidate();

    //保存
    $("#btnsave").click(function (evt) { evt.preventDefault(); save($(this)); });
    //取消
    $("#btncancel").click(function (evt) { evt.preventDefault(); parent.closeDialog(); return false; });

    //添加行
    $(".addRow").click(function (evt) {
        evt.preventDefault();
        addRow();
    });

    //添加行(tags)
    $(".addTagRow").click(function (evt) {
        evt.preventDefault();
        addTagRow();
    });

    //从数据字典选择
    $(".addFromDict").click(function (evt) {
        evt.preventDefault();
        dlg.setSize(700, 480);
        dlg.setURL("选择数据字典项目", "/Public/DictSelect?callback=addFromDict");
        dlg.show();
    });

    //从知识库选择
    $(".addFromBook").click(function (evt) {
        evt.preventDefault();
        dlg.setSize(700, 480);
        dlg.setURL("选择知识库项目", "/Book/BookItemsSelect?callback=addFromBook");
        dlg.show();
    });

    //格式
    $("#label_options").click(function (evt) {
        evt.preventDefault();
        dlg.setSize(600, 400);
        dlg.setURL("格式设置", "/Public/ElementOptions?dataid=data_label");
        dlg.show();
    });
    $("#input_options").click(function (evt) {
        evt.preventDefault();
        dlg.setSize(600, 400);
        dlg.setURL("格式设置", "/Public/ElementOptions?dataid=data_input");
        dlg.show();
    });
    $("#leftlabel_options").click(function (evt) {
        evt.preventDefault();
        dlg.setSize(600, 400);
        dlg.setURL("格式设置", "/Public/ElementOptions?dataid=data_leftlabel");
        dlg.show();
    });
    $("#rightlabel_options").click(function (evt) {
        evt.preventDefault();
        dlg.setSize(600, 400);
        dlg.setURL("格式设置", "/Public/ElementOptions?dataid=data_rightlabel");
        dlg.show();
    });

    //修改控件类型
    $("#Inputtype").change(function (evt) {

        if ($(this).val() == "text" || $(this).val() == "textarea") {
            //字符
            $("#Fielddatatype").val("0");
            tab.tabs("getTab", "序列").panel('options').tab.hide();
            $("#tr_dateformat").hide();
            $("#tr_lenrange").show();
            $("#tr_valrange").hide();
            $(".validate-options [data-fieldname='Minval']").val("");
            $(".validate-options [data-fieldname='Maxval']").val("");
            $(".validate-options [data-fieldname='Requiredate']").prop("checked", false);
            $(".validate-options [data-fieldname='Formatstr']").val("");
        }
        else if ($(this).val() == "number") {
            //数字
            $("#Fielddatatype").val("2");
            tab.tabs("getTab", "序列").panel('options').tab.hide();
            $("#tr_dateformat").hide();
            $("#tr_lenrange").hide();
            $("#tr_valrange").show();
            $(".validate-options [data-fieldname='Minlen']").val("0");
            $(".validate-options [data-fieldname='Maxlen']").val("0");
            $(".validate-options [data-fieldname='Requiredate']").prop("checked", false);
            $(".validate-options [data-fieldname='Formatstr']").val("");
        }
        else if ($(this).val() == "checkbox" || $(this).val() == "radio" || $(this).val() == "dropdownlist" || $(this).val() == "combox") {
            //序列
            $("#Fielddatatype").val("1");
            tab.tabs("getTab", "序列").panel('options').tab.show();
            $("#tr_dateformat").hide();
            $("#tr_lenrange").hide();
            $("#tr_valrange").hide();
            $(".validate-options [data-fieldname='Minlen']").val("0");
            $(".validate-options [data-fieldname='Maxlen']").val("0");
            $(".validate-options [data-fieldname='Minval']").val("");
            $(".validate-options [data-fieldname='Maxval']").val("");
            $(".validate-options [data-fieldname='Requiredate']").prop("checked", false);
            $(".validate-options [data-fieldname='Formatstr']").val("");
        }
        else if ($(this).val() == "datepicker" || $(this).val() == "datetext") {
            //日期
            $("#Fielddatatype").val("3");
            tab.tabs("getTab", "序列").panel('options').tab.hide();
            $("#tr_dateformat").show();
            $("#tr_lenrange").hide();
            $("#tr_valrange").hide();
            $(".validate-options [data-fieldname='Minlen']").val("0");
            $(".validate-options [data-fieldname='Maxlen']").val("0");
            $(".validate-options [data-fieldname='Minval']").val("");
            $(".validate-options [data-fieldname='Maxval']").val("");
        }

        if ($(this).val() == "checkbox" || $(this).val() == "radio")
            //方向
            $("#tr_direction").show();
        else
            $("#tr_direction").hide();

        if ($(this).val() == "hidden")
            $("#layout-options").hide();
        else
            $("#layout-options").show();
    });
    $("#Inputtype").change();

    //是否使用全局设置
    $("#Setoption input[type='radio']").change(function () {
        if ($(this).prop("checked")) {
            if ($(this).val() == "1")
                $(".useroptions").show();
            else
                $(".useroptions").hide();
        }
    });
    $("#Setoption input[type='radio']").change();

    //修改序列来源
    $("#Itemsource").change(function () {
        if ($(this).val() == 0) {
            //自定义
            $("#tr_itembook").hide();
            $("#tr_itemdict").hide();
            $("#tr_items").show();
        } else if ($(this).val() == 1) {
            //数据字典
            $("#tr_itembook").hide();
            $("#tr_itemdict").show();
            $("#tr_items").hide();
        } else if ($(this).val() == 2) {
            //知识库
            $("#tr_itembook").show();
            $("#tr_itemdict").hide();
            $("#tr_items").hide();
        } else if ($(this).val() == 3) {
            //自定义+知识库
            $("#tr_itembook").show();
            $("#tr_itemdict").hide();
            $("#tr_items").show();
        }
    });
    $("#Itemsource").change();

    //
    $("#Labelvisible input[type='radio']").change(function () {
        if ($(this).prop("checked")) {
            $("#label_options").attr("disabled", $(this).val() != "1");
            $("#Labelcols").attr("disabled", $(this).val() != "1");
            $("#Labelspacecols").attr("disabled", $(this).val() != "1");
            $("#Labelalign").attr("disabled", $(this).val() != "1");
            $("#Labeltext").attr("disabled", $(this).val() != "1");
        }
    });;
    $("#Inputvisible input[type='radio']").change(function () {
        if ($(this).prop("checked")) {
            $("#input_options").attr("disabled", $(this).val() != "1");
            $("#Inputcols").attr("disabled", $(this).val() != "1");
            $("#Inputspacecols").attr("disabled", $(this).val() != "1");
            $("#Inputalign").attr("disabled", $(this).val() != "1");
        }
    });
    $("#Leftlabelvisible input[type='radio']").change(function () {
        if ($(this).prop("checked")) {
            $("#leftlabel_options").attr("disabled", $(this).val() != "1");
            $("#Leftlabel").attr("disabled", $(this).val() != "1");
            $("#Leftlabelcols").attr("disabled", $(this).val() != "1");
            $("#Leftlabelspacecols").attr("disabled", $(this).val() != "1");
            $("#Leftlabelalign").attr("disabled", $(this).val() != "1");
        }
    });
    $("#Rightlabelvisible input[type='radio']").change(function () {
        if ($(this).prop("checked")) {
            $("#rightlabel_options").attr("disabled", $(this).val() != "1");
            $("#Rightlabel").attr("disabled", $(this).val() != "1");
            $("#Rightlabelcols").attr("disabled", $(this).val() != "1");
            $("#Rightlabelspacecols").attr("disabled", $(this).val() != "1");
            $("#Rightlabelalign").attr("disabled", $(this).val() != "1");
        }
    });
    $("#Labelvisible input[type='radio']").change();
    $("#Inputvisible input[type='radio']").change();
    $("#Leftlabelvisible input[type='radio']").change();
    $("#Rightlabelvisible input[type='radio']").change();

    //加载Tag明细
    loadTags();
    //加载序列明细
    loadItems();
    //加载字段参数
    loadFieldAttr();
});

function initValidate() {
    //表单验证
    $('#inputform').validate({
        rules: {
            Fieldid: {
                required: true, alnum: true, maxlength: 100,
                remote: {
                    url: baseurl + 'Manage/Fields/ExistCheck',
                    type: 'post',
                    data: {
                        id: $("#Id").val(),
                        talbeid: $("#Tableid").val(),
                        fieldid: $("#Fieldid").val()
                    },
                    dataFilter: function (data, type) {
                        if (data == "yes")
                            return true;
                        else
                            return false;
                    }
                }
            },
            Tableid: {
                required: true
            },
            Fieldname: {
                required: true, maxlength: 100
            },
            Fieldname_en: {
                maxlength: 100
            },
            Fielddatatype: {
                required: true
            },
            Fieldkind: {
                required: true
            },
            Sort: {
                integer: true
            }
        },
        errorPlacement: function (error, element) {
            error.appendTo(element.parent());
        },
        messages: {
            Fieldid: {
                remote: '字段代码已经存在'
            }
        }
        //success: function (label) {
        //    label.html("<span style=\"color:green\"></span>").addClass("success");
        //}
    });
}

//从数据字典选择(Itemvalue,Itemname)
function addFromDict(jsonstr) {
    var jsondata = JSON.parse(jsonstr);

    for (var i = 0; i < jsondata.length; i++) {
        var rowdata = {
            Itemvalue: jsondata[i].Itemvalue,
            Itemname: jsondata[i].Itemname,
            Isgeneral: "1"
        };
        addRow(rowdata);
    }
}

//从知识库添加(Itemvalue,Itemname)
function addFromBook(jsonstr) {
    var jsondata = JSON.parse(jsonstr);

    for (var i = 0; i < jsondata.length; i++) {
        var rowdata = {
            Itemvalue: jsondata[i].Itemvalue,
            Itemname: jsondata[i].Itemname,
            Isgeneral: "1"
        };
        addRow(rowdata);
    }
}

//添加行
function addRow(data) {
    
    //在列表中添加一行
    var row = $("#list_table .list-template tr").eq(0).clone();
    row.appendTo("#list_table .list-data");

    //行ID
    $(row).attr("data-id", "0");
    //为每个控件生成动态id和name，否则表单验证会有问题
    var newid = (new Date()).getMilliseconds();
    $(row).find(".list-datafield").each(function () {
        $(this).attr("id", $(this).attr("id") + "_" + newid);
        $(this).attr("name", $(this).attr("name") + "_" + newid);
    });
    //为每行添加验证规则
    $(row).find("[data-fieldname='Itemvalue']").rules("add", { required: true, maxlength: 50 });
    $(row).find("[data-fieldname='Itemname']").rules("add", { required: true, maxlength: 500 });

    //回车不关闭对话框
    handlerKeydown(row);

    //子项目代码文本框自动完成
    $(row).find("#Code" + "_" + newid).wyautocomplete({
        url: baseurl + 'Public/SearchDictItemJson',
        valueField: 'Code',
        textField: 'Name_cn',
        columns: [
            { field: 'Code', width: 100 },
            { field: 'Name_cn', width: 160 }
        ],

        onSelected: function (item) {
            $(row).find(".list-datafield").each(function () {
                $(this).val(item[$(this).attr("data-fieldname")]);
            });
        }
    });

    //行数据
    if (data) {
        //行ID
        $(row).attr("data-id", data.Id);
        //行数据
        $(row).find(".list-datafield").each(function () {
            $(this).val(data[$(this).attr("data-fieldname")]);
        });
        $(row).find("[data-fieldname=Isgeneral]").prop("checked", data.Isgeneral == "1" ? true : false);
    }

    //删除行事件
    $(row).find("#btndelrow").click(function () {
        var rowId = $(row).attr("data-id");
        if (rowId == "0") {
            //如果是新加的行，则直接移除
            $(row).remove();
        } else {
            //否则移到隐藏区域，等待保存
            $(row).appendTo($("#list_table .list-deleted"));
        }
    });

    //上移、下移
    $(row).find(".moveUp").click(function () {
        if (row.prev()) {
            row.insertBefore(row.prev());
        }
    });
    $(row).find(".moveDown").click(function () {
        if (row.next()) {
            row.insertAfter(row.next());
        }
    });
}

//添加行(Tags)
function addTagRow(data) {
    //在列表中添加一行
    var row = $("#tags_table .list-template tr").eq(0).clone();
    row.appendTo("#tags_table .list-data");

    //行ID
    $(row).attr("data-id", "0");
    //为每个控件生成动态id和name，否则表单验证会有问题
    var newid = (new Date()).getMilliseconds();
    $(row).find(".list-datafield").each(function () {
        $(this).attr("id", $(this).attr("id") + "_" + newid);
        $(this).attr("name", $(this).attr("name") + "_" + newid);
    });
    //为每行添加验证规则
    $(row).find("[data-fieldname='Tagname']").rules("add", { required: true, maxlength: 50 });

    //回车不关闭对话框
    handlerKeydown(row);

    //子项目代码文本框自动完成
    $(row).find("[data-fieldname='Tagname']").wyautocomplete({
        url: baseurl + 'Public/SearchTagItemJson',
        valueField: 'Tagname',
        textField: 'Tagname',
        Columns: [
            { field: 'Tagname', width: 100 }
        ],
        onSelected: function (item) {
            $(row).find(".list-datafield").each(function () {
                $(this).val(item[$(this).attr("data-fieldname")]);
            });
        }
    });

    //行数据
    if (data) {
        //行ID
        $(row).attr("data-id", data.Id);
        //行数据
        $(row).find(".list-datafield").each(function () {
            $(this).val(data[$(this).attr("data-fieldname")]);
        });
    }

    //删除行事件
    $(row).find("#btndelrow").click(function () {
        var rowId = $(row).attr("data-id");
        if (rowId == "0") {
            //如果是新加的行，则直接移除
            $(row).remove();
        } else {
            //否则移到隐藏区域，等待保存
            $(row).appendTo($("#tags_table .list-deleted"));
        }
    });
}

//加载明细数据
function loadItems() {
    for (var i = 0; i < itemsJson.length; i++) {
        addRow(itemsJson[i]);
    }
}

//加载明细数据
function loadTags() {
    for (var i = 0; i < tagsJson.length; i++) {
        addTagRow(tagsJson[i]);
    }
}

function loadFieldAttr() {
    if (fieldOptions.Input.Attr) {
        //控件
        $("#inputform [data-fieldname='Inputcols']").val(fieldOptions.Input.Attr.Cols);
        $("#inputform [data-fieldname='Inputspacecols']").val(fieldOptions.Input.Attr.LeftSpaceCols);
        $("#inputform [data-fieldname='Inputalign']").val(fieldOptions.Input.Attr.Align);
        $("#data_input").val(JSON.stringify(fieldOptions.Input.Attr));

        //字段名
        $("#inputform [data-fieldname='Labelcols']").val(fieldOptions.Label.Attr.Cols);
        $("#inputform [data-fieldname='Labelspacecols']").val(fieldOptions.Label.Attr.LeftSpaceCols);
        $("#inputform [data-fieldname='Labelalign']").val(fieldOptions.Label.Attr.Align);
        $("#data_label").val(JSON.stringify(fieldOptions.Label.Attr));

        //左标签
        $("#inputform [data-fieldname='Leftlabelcols']").val(fieldOptions.LeftLabel.Attr.Cols);
        $("#inputform [data-fieldname='Leftlabelspacecols']").val(fieldOptions.LeftLabel.Attr.LeftSpaceCols);
        $("#inputform [data-fieldname='Leftlabelalign']").val(fieldOptions.LeftLabel.Attr.Align);
        $("#data_leftlabel").val(JSON.stringify(fieldOptions.LeftLabel.Attr));

        //右标签
        $("#inputform [data-fieldname='Rightlabelcols']").val(fieldOptions.RightLabel.Attr.Cols);
        $("#inputform [data-fieldname='Rightlabelspacecols']").val(fieldOptions.RightLabel.Attr.LeftSpaceCols);
        $("#inputform [data-fieldname='Rightlabelalign']").val(fieldOptions.RightLabel.Attr.Align);
        $("#data_rightlabel").val(JSON.stringify(fieldOptions.RightLabel.Attr));
    } else {
        //控件
        $("#inputform [data-fieldname='Inputcols']").val(defaultOptions.InputAttr.Cols);
        $("#inputform [data-fieldname='Inputspacecols']").val(defaultOptions.InputAttr.LeftSpaceCols);
        $("#inputform [data-fieldname='Inputalign']").val(defaultOptions.InputAttr.Align);
        $("#data_input").val(JSON.stringify(defaultOptions.InputAttr));

        //字段名
        $("#inputform [data-fieldname='Labelcols']").val(defaultOptions.LabelAttr.Cols);
        $("#inputform [data-fieldname='Labelspacecols']").val(defaultOptions.LabelAttr.LeftSpaceCols);
        $("#inputform [data-fieldname='Labelalign']").val(defaultOptions.LabelAttr.Align);
        $("#data_label").val(JSON.stringify(defaultOptions.LabelAttr));

        //左标签
        $("#inputform [data-fieldname='Leftlabelcols']").val(defaultOptions.LeftLabelAttr.Cols);
        $("#inputform [data-fieldname='Leftlabelspacecols']").val(defaultOptions.LeftLabelAttr.LeftSpaceCols);
        $("#inputform [data-fieldname='Leftlabelalign']").val(defaultOptions.LeftLabelAttr.Align);
        $("#data_leftlabel").val(JSON.stringify(defaultOptions.LeftLabelAttr));

        //右标签
        $("#inputform [data-fieldname='Rightlabelcols']").val(defaultOptions.RightLabelAttr.Cols);
        $("#inputform [data-fieldname='Rightlabelspacecols']").val(defaultOptions.RightLabelAttr.LeftSpaceCols);
        $("#inputform [data-fieldname='Rightlabelalign']").val(defaultOptions.RightLabelAttr.Align);
        $("#data_rightlabel").val(JSON.stringify(defaultOptions.RightLabelAttr));
    }
}

function save(obj) {
    if (!$("#inputform").valid()) {
        return;
    }

    var jsondata = {
        Field: {
            Id: $("#Id").val(),
            Values: {}
        },
        ItemList: [],
        ItemDeleted: [],
        TagList: [],
        TagDeleted: [],
        Options: {
            Label: {},
            Input: {},
            LeftLabel: {},
            RightLabel: {},
            Logical: {},
            Validate: {},
            Style: {},
            Column: {}
        }
    };
    //主表数据
    $(".field-base .datafield").each(function () {
        jsondata.Field.Values[$(this).attr("data-fieldname")] = $(this).val();
    });

    //是否加密
    jsondata.Field.Values.Isencrypt = $(".field-base [data-fieldname='Isencrypt']").prop("checked") ? 1 : 0;
    //是否停用
    jsondata.Field.Values.Islocked = $(".field-base [data-fieldname='Islocked']").prop("checked") ? 1 : 0;
    //只读
    jsondata.Options.Readonly = $("#validate-options [data-fieldname='Readonly']").prop("checked") ? "1" : "0";
    //默认值
    jsondata.Options.Defaultval = $("#validate-options [data-fieldname='Defaultval']").val();

    //布局项
    jsondata.Options.NewRow = $("#inputform [data-fieldname='NewRow']").prop("checked") ? "1" : "0";
    //字段名
    jsondata.Options.Label.Visible = $("#inputform [data-fieldname='Labelvisible']").val();
    jsondata.Options.Label.Text = $("#inputform [data-fieldname='Labeltext']").val();

    //控件
    jsondata.Options.Input.Visible = $("#inputform [data-fieldname='Inputvisible']").val();
    jsondata.Options.Input.Direction = $("#inputform [data-fieldname='Direction']").val();
    jsondata.Options.Input.FormatStr = $("#inputform [data-fieldname='Formatstr']").val();

    //左标签
    jsondata.Options.LeftLabel.Visible = $("#inputform [data-fieldname='Leftlabelvisible']").val();
    jsondata.Options.LeftLabel.Text = $("#inputform [data-fieldname='Leftlabel']").val();

    //右标签
    jsondata.Options.RightLabel.Visible = $("#inputform [data-fieldname='Rightlabelvisible']").val();
    jsondata.Options.RightLabel.Text = $("#inputform [data-fieldname='Rightlabel']").val();

    if ($("#inputform [data-fieldname='Setoption']").val() == "1") {
        //字段名
        jsondata.Options.Label.Attr = JSON.parse($("#data_label").val());
        jsondata.Options.Label.Attr.Cols = $("#inputform [data-fieldname='Labelcols']").val();
        jsondata.Options.Label.Attr.LeftSpaceCols = $("#inputform [data-fieldname='Labelspacecols']").val();
        jsondata.Options.Label.Attr.Align = $("#inputform [data-fieldname='Labelalign']").val();

        //控件
        jsondata.Options.Input.Attr = JSON.parse($("#data_input").val());
        jsondata.Options.Input.Attr.Cols = $("#inputform [data-fieldname='Inputcols']").val();
        jsondata.Options.Input.Attr.LeftSpaceCols = $("#inputform [data-fieldname='Inputspacecols']").val();

        //左标签
        jsondata.Options.LeftLabel.Attr = JSON.parse($("#data_leftlabel").val());
        jsondata.Options.LeftLabel.Attr.Cols = $("#inputform [data-fieldname='Leftlabelcols']").val();
        jsondata.Options.LeftLabel.Attr.LeftSpaceCols = $("#inputform [data-fieldname='Leftlabelspacecols']").val();
        jsondata.Options.LeftLabel.Attr.Align = $("#inputform [data-fieldname='Leftlabelalign']").val();

        //右标签
        jsondata.Options.RightLabel.Attr = JSON.parse($("#data_rightlabel").val());
        jsondata.Options.RightLabel.Attr.Cols = $("#inputform [data-fieldname='Rightlabelcols']").val();
        jsondata.Options.RightLabel.Attr.LeftSpaceCols = $("#inputform [data-fieldname='Rightlabelspacecols']").val();
        jsondata.Options.RightLabel.Attr.Align = $("#inputform [data-fieldname='Rightlabelalign']").val();
    } else {
        jsondata.Options.Label.Attr = null;
        jsondata.Options.Input.Attr = null;
        jsondata.Options.LeftLabel.Attr = null;
        jsondata.Options.RightLabel.Attr = null;
    }

    //数据逻辑

    //验证项
    jsondata.Options.Validate.Require = $("#validate-options [data-fieldname='Require']").prop("checked") ? "1" : "0";
    jsondata.Options.Validate.RequireDate = $("#validate-options [data-fieldname='Requiredate']").prop("checked") ? "1" : "0";
    jsondata.Options.Validate.Minlen = $("#validate-options [data-fieldname='Minlen']").val();
    jsondata.Options.Validate.Maxlen = $("#validate-options [data-fieldname='Maxlen']").val();
    jsondata.Options.Validate.Minval = $("#validate-options [data-fieldname='Minval']").val();
    jsondata.Options.Validate.Maxval = $("#validate-options [data-fieldname='Maxval']").val();

    //Tag明细
    $("#tags_table .list-data tr").each(function () {
        var rowdata = {
            Id: $(this).attr("data-id"),
            Tagname: $(this).find("[data-fieldname='Tagname']").val()
        };

        jsondata.TagList.push(rowdata);
    });

    //已删除的Tag数据
    $("#tags_table .list-deleted tr").each(function () {
        jsondata.TagDeleted.push($(this).attr("data-id"));
    });

    //序列明细
    $("#list_table .list-data tr").each(function () {
        var rowdata = {
            Id: $(this).attr("data-id"),
            Values: {}
        };

        //行数据
        $(this).find(".list-datafield").each(function () {
            rowdata.Values[$(this).attr("data-fieldname")] = $(this).val();
        });
        rowdata.Values.Isgeneral = $(this).find("[data-fieldname=Isgeneral]").prop("checked") ? "1" : "0";

        jsondata.ItemList.push(rowdata);
    });

    //已删除的序列数据
    $("#list_table .list-deleted tr").each(function () {
        jsondata.ItemDeleted.push($(this).attr("data-id"));
    });

    //禁用保存按钮，防止重复提交
    $(obj).attr("disabled", true);

    $.ajax({
        type: "post",
        url: baseurl + "Manage/Fields/Save",
        data: { json: JSON.stringify(jsondata) },
        success: function (e) {
            $(obj).attr("disabled", false);
            if (e.Ret == "0") {
                parent.closeDialog(true);
            } else {
                $.messager.alert(csms_lang.message_error, e.Msg);
            }
        }
    });
}
